#pragma once

#include "Containers/Containers.h"

#include "ScriptCompiler/AST/ASTNode.h"

class CTypeNode;
class CScriptToken;
class CAccessLevelNode;
class CDecoratorNode;
class CExpressionNode;

class CGSharpFieldNode : public CASTNode
{
public:
    CGSharpFieldNode(std::weak_ptr<CScriptFileContext> InFile)
        : CASTNode( InFile,EASTNodeType::Field)
    {
    }

    std::shared_ptr<CScriptToken> Name;

    TOptional<std::shared_ptr<CAccessLevelNode>> AccessLevel;

    //might be null
    std::shared_ptr<CDecoratorNode> Decorator;


    std::shared_ptr<CTypeNode> Type;

    TOptional<std::shared_ptr<CExpressionNode>> Assignment;


    virtual void DebugPrint(int32_t InDepth) override;

    virtual std::shared_ptr<CScriptToken> GetFirstToken() override ;

};